package timerservice;

import timerservice.entity.Student;
import log.Log;
import log.LoggerFactory;

import java.util.Date;

public class MainTest {
    static Log logger = LoggerFactory.newInstance(MainTest.class);
    static TimerTaskManager manager;

    public static void main(String[] args) {
        /**
         * 添加一个任务，每隔１５秒打印一次当前系统的时间
         */
        //并行运行
        manager = new TimerTaskManager();
        concurrent();
        serise();

    }

    //并发任务
    private static void concurrent() {
        manager.setSeries(false);
        //默认实现方式
        MyTimerTask timerTask = new MyTimerTask() {//通过实现execute方法，自定义任务
            @Override
            public void execute() {
                logger.i("打印系统时间的任务1：" + new Date());
            }
        };
        timerTask.setPeriod(5000);
        timerTask.setDelay(100);
        timerTask.setTargetCount(5);
        timerTask.setTimerTaskManager(manager);//交给任务管理器进行管理
        //设置监听器可以观察执行过程
        timerTask.setOnStartListener((code, targetCount) -> {
            logger.i("任务开始执行：" + code + "  目标次数：" + targetCount);
        });
        timerTask.setOnProgressListener((code, runCount, targetCount) -> {
            logger.d("任务进度: 目标次数：" + targetCount + "  当前执行次数：" + runCount);
        });
        timerTask.setOnCompleteListener((code, targetCount) -> {
            logger.e("任务：" + code + "  目标次数：" + targetCount + " 已经执行完毕，定时任务已取消！");
        });
        manager.addTimerTask(timerTask);


        //Runnable实现方式更方便
        MyTimerTask studentTask = new MyTimerTask(() -> {//runnable 接口作为参数传入实现自定义任务
            logger.i("打印系统时间的任务2：" + new Date());

        }, 2000, 5000, 5);

        studentTask.setTimerTaskManager(manager);
        studentTask.setOnStartListener((code, targetCount) -> {
            logger.i("任务开始执行：" + code + "  目标次数：" + targetCount);
        });
        studentTask.setOnProgressListener((code, runCount, targetCount) -> {
            logger.d("任务：" + code + "  目标次数：" + targetCount + "  当前执行次数：" + runCount);
        });
        studentTask.setOnCompleteListener((code, targetCount) -> {
            logger.e("任务：" + code + "  目标次数：" + targetCount + " 已经执行完毕，定时任务已取消！");
        });
        manager.addTimerTask(studentTask);
    }

//    串行任务

    private static void serise() {
        //串行执行，先到先做，后到等待模式，否则同时执行多个任务
        manager.setSeries(true);
        //学生任务1
        Student student1 = new Student("小明", 20);
        //Runnable实现方式更方便
        MyTimerTask studentTask1 = new MyTimerTask(() -> {
            logger.i("打印学生信息任务1：" + student1);
        }, 1000, 1000, 4);

        studentTask1.setTimerTaskManager(manager);
        manager.addTimerTask(studentTask1);
        //学生任务2
        Student student2 = new Student("小明", 20);
        //Runnable实现方式更方便
        MyTimerTask studentTask2 = new MyTimerTask(() -> {
            logger.i("打印学生信息任务2：" + student2);
        }, 1000, 1000, 5);

        studentTask2.setTimerTaskManager(manager);
        manager.addTimerTask(studentTask2);
    }


}
